home *** CD-ROM | disk | FTP | other *** search
- /*
- File: Collections.h
-
- Contains: Sample collection functions & classes
-
- Written by: Steve Smith
-
- Copyright: © 1995 by Apple Computer, Inc., all rights reserved.
-
- Description:
- CList: Generic unordered list
- COrderedList: Generic ordered list
- CFrameList: Unordered list of frames -
- frames automatically refcounted when
- added/removed from list.
- CQueue: Generic queue collection
- CStack: Generic stack collection
- */
-
-
- #ifndef _SAMPLECOLLECTIONS_
- #define _SAMPLECOLLECTIONS_
-
- // --- OpenDoc Includes ---
-
- #ifndef _ODTYPES_
- #include <ODTypes.h>
- #endif
-
- #ifndef SOM_ODFrame_xh
- #include <Frame.xh>
- #endif
-
- // --- OpenDoc Utilities ---
-
- #ifndef _ODNEW_
- #include <ODNew.h>
- #endif
-
- #ifndef _LINKLIST_
- #include "LinkList.h"
- #endif
-
- // --- Macintosh Toolbox ---
-
- #ifndef _LIMITS_
- #include <Limits.h>
- #endif
-
- //------------------------------------------------------------------------------
- // Classes Defined by this Interface
- //------------------------------------------------------------------------------
-
- class CList;
- class CListIterator;
- class COrderedList;
- class COrdListIterator;
- class CFrameList;
- class CFrameListIterator;
- class CQueue;
- class CStack;
-
- //------------------------------------------------------------------------------
- // Forwards
- //------------------------------------------------------------------------------
-
- enum {
- kItemNotFound = -1,
- kListIsEmpty = 0
- };
-
- //------------------------------------------------------------------------------
- // Collection Class Definitions
- //------------------------------------------------------------------------------
-
- class CGenericLink: public Link {
- public:
- CGenericLink();
- CGenericLink(ODPtr value);
- virtual ~CGenericLink();
-
- ODPtr GetValue();
- void SetValue(ODPtr value);
-
- protected:
- ODPtr fValue;
- };
-
- class CFrameLink : public CGenericLink {
-
- public:
- CFrameLink();
- CFrameLink(ODFrame* frame);
- virtual ~CFrameLink();
-
- ODFrame* GetFrame();
- void SetFrame(ODFrame* frame);
- };
-
-
- class CList {
- public:
- CList();
- virtual ~CList();
-
- ODBoolean IsEmpty() const;
- ODULong Count() const;
- ODBoolean Contains(const ODPtr value);
- void DeleteAllLinks();
- void RemoveAllLinks();
- void Delete(ODPtr value);
- void Remove(ODPtr value);
- void Add(ODPtr value);
-
- private:
- LinkedList fList;
-
- friend class CListIterator;
- };
-
- class CListIterator {
- public:
- CListIterator() {}
- CListIterator(CList* list);
- virtual ~CListIterator();
-
- ODPtr First();
- ODPtr Next();
- ODPtr Previous();
- ODPtr Last();
- ODPtr Current();
- ODBoolean IsNotComplete();
- void RemoveCurrent();
- void DeleteCurrent();
-
- protected:
- LinkedListIterator* fIter;
- };
-
-
- class COrderedList {
- public:
- COrderedList();
- virtual ~COrderedList();
-
- ODBoolean IsEmpty() const;
- ODULong Count() const;
- ODBoolean Contains(const ODPtr value);
- ODUShort Position(const ODPtr value);
- void DeleteAllLinks();
- void RemoveAllLinks();
- void Delete(ODPtr valeu);
- void Remove(ODPtr value);
- ODPtr RemoveFirst();
- ODPtr RemoveLast();
- void AddBefore(const ODPtr existing, ODPtr value);
- void AddAfter(const ODPtr existing, ODPtr value);
- void AddFirst(ODPtr value);
- void AddLast(ODPtr value);
- ODPtr After(const ODPtr value) const;
- ODPtr Before(const ODPtr value) const;
- ODPtr First() const;
- ODPtr Last() const;
-
- private:
- LinkedList fList;
-
- friend class COrdListIterator;
- };
-
- class COrdListIterator : public CListIterator {
- public:
- COrdListIterator(COrderedList* list);
- virtual ~COrdListIterator();
- };
-
-
- class CFrameList {
- public:
- CFrameList();
- virtual ~CFrameList();
-
- ODBoolean IsEmpty() const;
- ODULong Count() const;
- ODBoolean Contains(const ODFrame* frame);
- void Remove(ODFrame* frame);
- void Add(ODFrame* frame);
- ODFrame* GetFrame();
-
- private:
- LinkedList fList;
-
- friend class CFrameListIterator;
- };
-
- class CFrameListIterator {
- public:
- CFrameListIterator(CFrameList* list);
- ~CFrameListIterator();
-
- ODFrame* First();
- ODFrame* Next();
- ODFrame* Previous();
- ODFrame* Last();
- ODFrame* Current();
- ODBoolean IsNotComplete();
- void ReleaseCurrent();
-
- private:
- LinkedListIterator* fIter;
- };
-
- class CStack {
- public:
- CStack();
- ~CStack();
-
- ODBoolean IsEmpty();
- void EmptyStack(ODBoolean deleteEntries = kODFalse);
- ODUShort SetSize(ODUShort maxDepth);
- ODBoolean PushEntry(ODPtr entry);
- ODPtr PopEntry();
-
- private:
- ODUShort fMaxDepth;
- LinkedList fStack;
- };
-
- class CQueue {
- public:
- CQueue();
- ~CQueue();
-
- ODBoolean IsEmpty();
- void EmptyQueue(ODBoolean deleteEntries = kODFalse);
- ODUShort SetSize(ODUShort maxEntries);
- ODBoolean AddEntry(ODPtr entry);
- ODPtr GetEntry();
-
- private:
- ODUShort fMaxEntries;
- LinkedList fQueue;
- };
-
- //-------------------------------------------------------------------
- // Inline methods
- //-------------------------------------------------------------------
-
- //====================================================================
- // CGenericLink
- //====================================================================
-
- inline CGenericLink::CGenericLink()
- :Link()
- {
- fValue = kODNULL;
- }
-
- inline CGenericLink::CGenericLink(ODPtr value)
- :Link()
- {
- fValue = value;
- }
-
- inline CGenericLink::~CGenericLink()
- {
- }
-
- inline ODPtr CGenericLink::GetValue()
- {
- return fValue;
- }
-
- inline void CGenericLink::SetValue(ODPtr value)
- {
- fValue = value;
- }
-
- //====================================================================
- // CFrameLink
- //====================================================================
-
- inline CFrameLink::CFrameLink()
- :CGenericLink()
- {
- }
-
- //====================================================================
- // CList
- //====================================================================
-
- inline CList::CList()
- {
- }
-
- inline CList::~CList()
- {
- fList.DeleteAllLinks();
- }
-
- inline ODBoolean CList::IsEmpty() const
- {
- return fList.IsEmpty();
- }
-
- inline ODULong CList::Count() const
- {
- return fList.Count();
- }
-
- inline void CList::RemoveAllLinks()
- {
- fList.RemoveAll();
- }
-
- //====================================================================
- // COrderedList
- //====================================================================
-
- inline COrderedList::COrderedList()
- {
- }
-
- inline COrderedList::~COrderedList()
- {
- fList.DeleteAllLinks();
- }
-
- inline ODBoolean COrderedList::IsEmpty() const
- {
- return fList.IsEmpty();
- }
-
- inline ODULong COrderedList::Count() const
- {
- return fList.Count();
- }
-
- inline void COrderedList::RemoveAllLinks()
- {
- fList.RemoveAll();
- }
-
- //====================================================================
- // COrdListIterator
- //====================================================================
-
- inline COrdListIterator::COrdListIterator(COrderedList* list)
- {
- fIter = new LinkedListIterator(&list->fList);
- }
-
- inline COrdListIterator::~COrdListIterator()
- {
- }
-
- //====================================================================
- // CFrameList
- //====================================================================
-
- inline CFrameList::CFrameList()
- {
- }
-
- inline ODBoolean CFrameList::IsEmpty() const
- {
- return fList.IsEmpty();
- }
-
- inline ODULong CFrameList::Count() const
- {
- return fList.Count();
- }
-
- //====================================================================
- // CStack
- //====================================================================
-
- inline CStack::CStack()
- {
- fMaxDepth = USHRT_MAX;
- }
-
- inline CStack::~CStack()
- {
- fStack.DeleteAllLinks();
- }
-
- inline ODBoolean CStack::IsEmpty()
- {
- return fStack.IsEmpty();
- }
-
- //====================================================================
- // CQueue
- //====================================================================
-
- inline CQueue::CQueue()
- {
- fMaxEntries = USHRT_MAX;
- }
-
- inline CQueue::~CQueue()
- {
- fQueue.DeleteAllLinks();
- }
-
- inline ODBoolean CQueue::IsEmpty()
- {
- return fQueue.IsEmpty();
- }
-
-
- #endif //_SAMPLECOLLECTIONS_
-
-